home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Tools / Languages / MacMETH 3.2.1 / MacMETH Manual 1992 / Manual Examples / GraphicExample.MOD < prev    next >
Encoding:
Text File  |  1992-10-09  |  1.8 KB  |  80 lines  |  [TEXT/MEDT]

  1. MODULE GraphicExample; (* draws Sierpinski curves in a graphic window. *)
  2.  
  3.     FROM GraphicWindows IMPORT     Window, OpenGraphicWindow, CloseGraphicWindow, Clear,
  4.                                SetPen, TurnTo, Move;
  5.     IMPORT TextWindows;
  6.  
  7.     VAR     i,x,y    : INTEGER;
  8.             w           : Window;
  9.             v           : TextWindows.Window;
  10.             Length      : ARRAY [1..5] OF INTEGER;
  11.  
  12.     PROCEDURE Line (Dir, Len : INTEGER);
  13.     BEGIN
  14.           TurnTo(w,Dir*45);
  15.         Move(w,Len*Length[i])
  16.     END Line;
  17.  
  18.     PROCEDURE B (Level : INTEGER); FORWARD;
  19.     PROCEDURE C (Level : INTEGER); FORWARD;
  20.     PROCEDURE D (Level : INTEGER); FORWARD;
  21.  
  22.     PROCEDURE A (Level : INTEGER);
  23.     BEGIN
  24.           IF (Level > 0) THEN
  25.             A(Level-1); Line(7,1); B(Level-1); Line(0,2);
  26.             D(Level-1); Line(1,1); A(Level-1)
  27.           END (* IF *)
  28.     END A;
  29.  
  30.     PROCEDURE B (Level : INTEGER);
  31.     BEGIN
  32.           IF (Level > 0) THEN
  33.               B(Level-1); Line(5,1); C(Level-1); Line(6,2);
  34.             A(Level-1); Line(7,1); B(Level-1)
  35.           END (* IF *)
  36.     END B;
  37.  
  38.     PROCEDURE C (Level : INTEGER);
  39.     BEGIN
  40.           IF (Level > 0) THEN
  41.             C(Level-1); Line(3,1); D(Level-1); Line(4,2);
  42.             B(Level-1); Line(5,1); C(Level-1)
  43.           END (* IF *)
  44.     END C;
  45.  
  46.     PROCEDURE D (Level : INTEGER);
  47.     BEGIN
  48.          IF (Level > 0) THEN
  49.             D(Level-1); Line(1,1); A(Level-1); Line(2,2);
  50.             C(Level-1); Line(3,1); D(Level-1)
  51.         END (* IF *)
  52.     END D;
  53.  
  54.  
  55. BEGIN (* GraphicExample *)
  56.     OpenGraphicWindow(w,5,5,502,315,"Sierpinski curve",Clear);
  57.     x := 123; y := 256;
  58.     Length[1] := 32;
  59.     FOR i:=2 TO 5 DO
  60.     Length[i] := Length[i-1] DIV 2
  61.     END (* FOR *);
  62.     LOOP
  63.         TextWindows.OpenTextWindow(v,312,0,200,100,"Text");
  64.         TextWindows.WriteString(v,"Level (0 to quit) : ");
  65.         TextWindows.ReadInt(v,i);
  66.         TextWindows.CloseTextWindow(v);
  67.         Clear(w);
  68.         IF (i <= 0) OR (i > 5) THEN
  69.             EXIT
  70.         END (* IF *);
  71.         SetPen(w,x,y);
  72.         A(i); Line(7,1);
  73.         B(i); Line(5,1);
  74.         C(i); Line(3,1);
  75.         D(i); Line(1,1);
  76.     END (* LOOP *);
  77.     CloseGraphicWindow(w)
  78. END GraphicExample.
  79.  
  80.